package com.hongye.util;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.ResourceBundle;
import java.util.UUID;
import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.json.JSONException;
import org.json.JSONObject;

import com.hongye.app.model.PhoneCodeModel;
import com.jfinal.upload.UploadFile;


public class Utils {
	
	public static  final int pageSize=10;
	
	private static Logger log = Logger.getLogger(Utils.class);
	private static final int defaultScale = 10;

	private ResourceBundle rb=ResourceBundle.getBundle("sys");
	
	
	public Utils() {
	}
	
	/**
	 * float 保留两位小数
	 * @author liushaomin
	 * 2017年7月31日
	 * @param price
	 * @return
	 */
	public static String decimalFormat(float price) {
		DecimalFormat decimalFormat = new DecimalFormat("0.00");//构造方法的字符格式这里如果小数不足2位,会以0补足.
		String p = decimalFormat.format(price);
		return p;
	}

	public static void prt(Object msg) {
		if(log.isInfoEnabled()){log.info("msg"+msg);}
	}

	@SuppressWarnings("unused")
	public static String strToMD5(String msg) {
		String str = "";
		StringBuffer hexValue = new StringBuffer();
		try {
			MessageDigest md5 = MessageDigest.getInstance("MD5");
			md5.update(msg.getBytes("utf-8"));
			byte[] entryMsg = md5.digest();
			str = new String(entryMsg);
			for (int i = 0; i < entryMsg.length; i++) {
				int val = ((int) entryMsg[i]) & 0xff;
				if (val < 16)
					hexValue.append("0");
				hexValue.append(Integer.toHexString(val));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return hexValue.toString();
	}
	
	public String getUpFilePath(){
		return rb.getString("upFilePath");
	}
	
	/**
	 * 得到UUID,32 位
	 * @return
	 */
	public static String getUUID(){
		return UUID.randomUUID().toString().replaceAll("-", "");
	}
	
	/**
	 * 得到应用的真实路径 
	 * @auth changpf 
	 * @param req
	 * @return
	 */
	public static String getRealPath(HttpServletRequest req){
//		return req.getServletContext().getRealPath("/")+"/upfile/";
		return req.getServletContext().getRealPath("/")+File.separator;
	}
	
	/**
	 * 将版本号 转换为整数.例如： 0.0.1  to 1,  add by changpf at 2015年12月12日14:12:10
	 * @param version
	 * @return
	 */
	public static int strToint(String version){
		int num=0;
		if(log.isInfoEnabled()){log.info("version"+version);}
		if(null!=version)Integer.parseInt(version.replaceAll("\\.", ""));
		return num;
	}
	
	/**
	 * 得到远程客户端信息 add by changpf at 2015年12月12日15:35:44
	 * @param req
	 * @return
	 */
	public static String getClientInfo(HttpServletRequest req){
//		return "RemoteHost: "+req.getRemoteHost()+"   remoteAddr:"+req.getRemoteAddr()+"   remoteUser:"+req.getRemoteUser();
		return "RemoteHost: "+req.getRemoteHost()+"   remoteAddr:"+req.getRemoteAddr();
	}
	
	public static void main(String args[]) {
		prt(Utils.strToMD5("admin"));
		String uuid=UUID.randomUUID().toString();
		if(log.isInfoEnabled()){log.info("uuid"+uuid);}
		if(log.isInfoEnabled()){log.info("uuid.length"+uuid.length());}
	}
	
	/**
	 * 将普通字符串转换成Hex编码字符串 GBK
	 * @author liushaomin
	 * 2016年10月4日
	 * @param realStr
	 * @return
	 */
	public static String encodeHexStr(String realStr) {
        String hexStr = null;
        if (realStr != null) {
            byte[] data = null;
            try {
                data = realStr.getBytes("GBK");
                if (data != null) {
                    hexStr = byteArr2HexStr(data);
                }
            } catch (Exception e) {
            }
        }
        return hexStr;
    }
 
	/**
	 * 将byte数组转换为表示16进制值的字符串
	 * @author liushaomin
	 * 2016年10月4日
	 * @param arrB
	 * @return
	 * @throws Exception
	 */
	public static String byteArr2HexStr(byte[] arrB) throws Exception {
        int iLen = arrB.length;
        // 每个byte用两个字符才能表示，所以字符串的长度是数组长度的两倍
        StringBuffer sb = new StringBuffer(iLen * 2);
        for (int i = 0; i < iLen; i++) {
            int intTmp = arrB[i];
            // 把负数转换为正数
            while (intTmp < 0) {
                intTmp = intTmp + 256;
            }
            // 小于0F的数需要在前面补0
            if (intTmp < 16) {
                sb.append("0");
            }
            sb.append(Integer.toString(intTmp, 16));
        }
        return sb.toString();
    }
	
	/**
	 * 随机生成六位验证码（）纯数字, 保存到数据库并
	 * @author liushaomin
	 * 2016年10月4日
	 * @return
	 */
	public static String randomCode(){
		int code = (int)((Math.random()*9+1)*100000);
		return String.valueOf(code);
	}
	
	/**
	 * 获得N位随机数 数字
	 * @author lifuqiang
	 * 2017-2-15
	 * @param length 位数
	 * @return
	 */
	public static int getRandom(int length) {
	    return (int) Math.round(Math.random() * (length));
	}
	
	/**
	 * 获得N位随机数 字符串 
	 * @author liushaomin
	 * 2017年8月14日
	 * @param length 长度
	 * @return
	 */
	public static String getRandomString(int length) {  
	    String base = "abcdefghijklmnopqrstuvwxyz0123456789";     
	    Random random = new Random();     
	    StringBuffer sb = new StringBuffer();     
	    for (int i = 0; i < length; i++) {     
	        int number = random.nextInt(base.length());     
	        sb.append(base.charAt(number));     
	    }     
	    return sb.toString();     
	 }     
	
	/**
	 * 获取当前系统时间
	 * @author liushaomin
	 * 2016年10月5日
	 * @return
	 */
	public static String getDate(){
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
		return df.format(new Date());
	}
	
	/**
	 * 获取任意时间
	 * @author liushaomin
	 * 2017年6月12日
	 * @param timeType  年 月 日 
	 * @param timeStamp 时间戳
	 * @param format 时间格式
	 * @return
	 */
	public static String getDate(String timeType, int timeStamp, String format){
		Calendar calendar = Calendar.getInstance();
		if(timeType.equals("day")){
			calendar.add(Calendar.DATE, -timeStamp);
		}else if(timeType.equals("WEEK")) {
			calendar.add(Calendar.DAY_OF_WEEK, -timeStamp);
		}else if(timeType.equals("month")) {
			calendar.add(Calendar.MONTH, -timeStamp);
		}
		Date date = calendar.getTime();
		DateFormat df = new SimpleDateFormat(format);
		return df.format(date);
	}

	/**
	 * 获取订单号
	 * @author liushaomin
	 * 2016年10月10日
	 * @return
	 */
	public synchronized static String getOrderSN() {
		SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
		String time = df.format(new Date());
		int code = (int)((Math.random()*9+1)*100);
		return time + code;
	}
	
	/**
	 * jsonstring 转map
	 * @author liushaomin
	 * 2016年10月12日
	 * @param jsonstring
	 * @return
	 */
	public static Map<String, Object> toMap(String jsonstring){
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			JSONObject jsonObject = new JSONObject(jsonstring);
	        Iterator<?> iterator = jsonObject.keys();
	        String key = null;
	        String value = null;
	        while (iterator.hasNext()) {
	            key = (String) iterator.next();
	            value = jsonObject.getString(key);
	            result.put(key, value);
	        }
		} catch (JSONException e) {
			e.printStackTrace();
		}
		return result;
	}
	
	/**
	 * base64编码
	 * @author lifuqiang
	 * 2016-10-21
	 * @param str
	 * @param charset
	 * @return
	 * @throws UnsupportedEncodingException
	 */
	public static String base64(String str, String charset) {
		String encoded = "";
		try {
			encoded = base64Encode(str.getBytes(charset));
			return encoded;    
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return encoded;    
	}
	
	private static char[] base64EncodeChars = new char[] { 
        'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 
        'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 
        'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 
        'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 
        'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 
        'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 
        'w', 'x', 'y', 'z', '0', '1', '2', '3', 
        '4', '5', '6', '7', '8', '9', '+', '/' 
    }; 
	
    public static String base64Encode(byte[] data) {
        StringBuffer sb = new StringBuffer(); 
        int len = data.length; 
        int i = 0; 
        int b1, b2, b3; 
        while (i < len) { 
            b1 = data[i++] & 0xff; 
            if (i == len){ 
                sb.append(base64EncodeChars[b1 >>> 2]); 
                sb.append(base64EncodeChars[(b1 & 0x3) << 4]); 
                sb.append("=="); 
                break; 
            } 
            b2 = data[i++] & 0xff; 
            if (i == len){ 
                sb.append(base64EncodeChars[b1 >>> 2]); 
                sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]); 
                sb.append(base64EncodeChars[(b2 & 0x0f) << 2]); 
                sb.append("="); 
                break; 
            } 
            b3 = data[i++] & 0xff; 
            sb.append(base64EncodeChars[b1 >>> 2]); 
            sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]); 
            sb.append(base64EncodeChars[((b2 & 0x0f) << 2) | ((b3 & 0xc0) >>> 6)]); 
            sb.append(base64EncodeChars[b3 & 0x3f]); 
        } 
        return sb.toString(); 
    }
    
    public static String urlEncoder(String str, String charset){
		String result;
		try {
			result = URLEncoder.encode(str, charset);
			return result;
		} catch (UnsupportedEncodingException e) {
			logException(log, e);
		}
		return "";
	}
    
    /**
	 * 电商Sign签名生成
	 * @author lifuqiang
	 * 2016-10-21
	 * @param content
	 * @param keyValue
	 * @param charset
	 * @return
	 * @throws UnsupportedEncodingException
	 * @throws Exception
	 */
	public static String encrypt (String content, String keyValue, String charset) throws UnsupportedEncodingException, Exception{
		if (keyValue != null){
			return base64(strToMD5(content + keyValue), charset);
		}
		return base64(strToMD5(content), charset);
	}
	
	/**
	 * 清除XSS隐患
	 * @author liushoamin
	 */
	public static String clearXSS(String code) {
		code = code.replaceAll("(?i)<script[^>]*>([\\s\\S]*?)</script>", "");
		code = code.replaceAll("(?i)<script[^>]*(/)?>", "");
		code = code.replaceAll("(?i)<applet[^>]*>([\\s\\S]*?)</applet>", "");
		code = code.replaceAll("(?i)<base[^>]*>([\\s\\S]*?)</base>", "");
		code = code.replaceAll("(?i)<base[^>]*(/)?>", "");
		code = code.replaceAll("(?i)<head[^>]*>([\\s\\S]*?)</head>", "");
		code = code.replaceAll("(?i)<style[^>]*(/)?>", "");
		code = code.replaceAll("(?i)<style[^>]*>([\\s\\S]*?)</style>", "");
		code = code.replaceAll("(?i)<link[^>]*(/)?>", "");
		code = code.replaceAll("(?i)<link[^>]*>([\\s\\S]*?)</link>", "");
		code = code.replaceAll("(?i)<meta[^>]*(/)?>", "");
		code = code.replaceAll("(?i)<meta[^>]*>([\\s\\S]*?)</meta>", "");
		code = code.replaceAll("(?i)<title[^>]*(/)?>", "");
		code = code.replaceAll("(?i)<title[^>]*>([\\s\\S]*?)</title>", "");
		code = code.replaceAll("(?i)<object[^>]*(/)?>", "");
		code = code.replaceAll("(?i)<object[^>]*>([\\s\\S]*?)</object>", "");
		code = code.replaceAll("(?i)<embed[^>]*(/)?>", "");
		code = code.replaceAll("(?i)<embed[^>]*>([\\s\\S]*?)</embed>", "");
		code = code.replaceAll("(?i)<frame[^>]*(/)?>", "");
		code = code.replaceAll("(?i)<frame[^>]*>([\\s\\S]*?)</frame>", "");
		code = code.replaceAll("(?i)<frameset[^>]*(/)?>", "");
		code = code.replaceAll("(?i)<frameset[^>]*>([\\s\\S]*?)</frameset>", "");
		code = code.replaceAll("(?i)<iframe[^>]*(/)?>", "");
		code = code.replaceAll("(?i)<iframe[^>]*>([\\s\\S]*?)</iframe>", "");
		code = code.replaceAll("(?i)<!--([\\s\\S]*?)-->", "");
		code = code.replaceAll("(?i)^!--(.*)--$", "");
		code = code.replaceAll("(?i)javascript:", "");
		code = code.replaceAll("(?i)vbscript:", "");
		code = code.replaceAll("(?i)data:", "");
		code = code.replaceAll("(?i)mhtml:", "");
		code = code.replaceAll("(?i)ms-its:", "");
		code = code.replaceAll("(?i)firefoxurl:", "");
		code = code.replaceAll("(?i)mocha:", "");
		code = code.replaceAll("(?i)livescript:", "");
		code = code.replaceAll("(?i)mocha:", "");
		code = code.replaceAll("(?i)eval\\(([\\s\\S]*?)\\)", "");
		code = code.replaceAll("(?i)expression\\(([\\s\\S]*?)\\)", "");
		code = code.replaceAll("(?i)url\\(([\\s\\S]*?)\\)", "");
		code = code.replaceAll("(?i) on([^>]*?)=", " ");
		code = code.replaceAll("(?i)style([\\s\\S]*?)=([\\s\\S]*?)/\\*([\\s\\S]*?)\\*/[^>]*", "");
		return code;
	}
	
	/**
	 * 是否包含敏感词
	 * @param source
	 * @param words
	 * @return
	 */
	//TODO 每次都需要读取文件，后期考虑加缓存，敏感词文件要更新，路径的问题
	public static boolean containBlackWords(String source) {
		List<String> list = new ArrayList<String>();
		FileInputStream fis = null;
		InputStreamReader isr = null;
		BufferedReader br = null; 
		String str = "";
		try {
			fis = new FileInputStream("G:/git/coop/j2ee/rbg/WebContent/admin/blackwords/blackwords.txt");// FileInputStream
			isr = new InputStreamReader(fis);// InputStreamReader 是字节流通向字符流的桥梁,
			br = new BufferedReader(isr);// 从字符输入流中读取文件中的内容,封装了一个new InputStreamReader的对象
			while ((str = br.readLine()) != null) {
				list.add(str);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			System.out.println("读取文件失败");
		}finally {
			try {
				br.close();
				isr.close();
				fis.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return Utils.containBlackWords(source, list);
	}
	
	/**
	 * 是否包含敏感词
	 * @param source
	 * @param words
	 * @return
	 */
	public static boolean containBlackWords(String source, List<String> blackwords) {
		if (source == null) {
			return false;
		}
		String filteredstr = getFilteredSource(source.toLowerCase()).toString();
		for (String item : blackwords) {
			if (filteredstr.contains(item)) {
				return true;
			}
		}
		return false;
	}
	
	/**
	 * 返回过滤后的source，如：
	 * <《<h1>你好I love U<h2>
	 * 会返回 《你好IloveU
	 * @param source
	 * @return
	 */
	private static StringBuffer getFilteredSource(String source) {
		StringBuffer filteredBuffer = new StringBuffer();
		String regex = "[a-zA-Z\u2E80-\u9FFF]";
		Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
		for(int i = 0, k=0; i < source.length(); i++){
			String c = String.valueOf(source.charAt(i));
			if (source.charAt(i) == '<') {
				for(k = i + 1; k < source.length(); k++) {
					if (source.charAt(k) == '<') {
						k = i;
						break;
					}
					if (source.charAt(k) == '>') {
						break;
					}
				}
				i = k;
			} else {
				if (p.matcher(c).find()) {
					filteredBuffer.append(c);
				}
			}
		}
		return filteredBuffer;
	}
	
	/**
	 * 指定过去时间获取到当前时间长度（定时器）
	 * yyyy-MM-dd HH:mm:ss 的时间格式
	 * @author lifuqiang
	 * 2016-12-19
	 * @param sdfstr
	 * @return
	 */
	public static long getLongTime(String sdfstr){
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		long timeStart=Utils.sdfToDate(sdfstr, sdf).getTime();
		long timeend=Utils.sdfToDate(Utils.getDate(), sdf).getTime();
		return timeend - timeStart;
	}
	
	/**
	 * SimpleDateFormat时间格式转为Date时间格式
	 * @author lifuqiang
	 * 2016-11-15
	 * @param sdfstr
	 * @param sdf
	 * @return
	 */
	public static Date sdfToDate(String sdfstr,SimpleDateFormat sdf){
		Date date = new Date();
		try {
			date = sdf.parse(sdfstr);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return date;
	}
	
	/**
	 * Date时间格式转为SimpleDateFormat时间格式字符串
	 * @author lifuqiang
	 * 2016-11-15
	 * @param date
	 * @param sdf
	 * @return
	 */
	public static String dateTosdf(Date date, SimpleDateFormat sdf){
		return sdf.format(date);
	}
	
	/**
	 * SimpleDateFormat的格式转换为另一个SimpleDateFormat格式
	 * @author lifuqiang
	 * 2016-12-20
	 * @param datestr
	 * @param formsdf
	 * @param tomsdf
	 * @return
	 * @throws ParseException 
	 */
	public static String sdfTosdf(String datestr, String formsdf, String tomsdf){
		SimpleDateFormat sdf1 = new SimpleDateFormat(formsdf);
	    SimpleDateFormat sdf2 = new SimpleDateFormat(tomsdf);
	    Date date = new Date();
		try {
			date = sdf1.parse(datestr);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return sdf2.format(date);
	}
	
	/**
	 * 相乘
	 * @author liushaomin
	 * 2016年12月16日
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static double muti(double d1, double d2) {
		BigDecimal b1 = new BigDecimal(Double.toString(d1));
		BigDecimal b2 = new BigDecimal(Double.toString(d2));
		return b1.multiply(b2).doubleValue();
	}
	
	/**
	 * 相加
	 * @author liushaomin
	 * 2016年12月16日
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static double add(double d1, double d2) {
		BigDecimal b1 = new BigDecimal(Double.toString(d1));
		BigDecimal b2 = new BigDecimal(Double.toString(d2));
		return b1.add(b2).doubleValue();
	}
	
	/**
	 * 相减
	 * @author liushaomin
	 * 2016年12月16日
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static double subtract(double d1, double d2) {
		BigDecimal b1 = new BigDecimal(Double.toString(d1));
		BigDecimal b2 = new BigDecimal(Double.toString(d2));
		return b1.subtract(b2).doubleValue();
	}
	
	/**
	 * 相除
	 * @author liushaomin
	 * 2016年12月16日
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static double div(double d1, double d2) {
		return div(d1, d2, defaultScale);
	}

	/**
	 * 相除
	 * @author liushaomin
	 * 2016年12月16日
	 * @param d1
	 * @param d2
	 * @param scale
	 * @return
	 */
	public static double div(double d1, double d2, int scale) {
		if (scale < 0) {
			throw new IllegalArgumentException("The scale must be a positive integer or zero");
		}
		BigDecimal b1 = new BigDecimal(Double.toString(d1));
		BigDecimal b2 = new BigDecimal(Double.toString(d2));
		return b1.divide(b2, scale, BigDecimal.ROUND_HALF_DOWN).doubleValue();
	}
	
	/**
	 * 下载
	 * @author liushaomin
	 * 2016年12月21日
	 * @param response
	 * @param file 要下载的文件
	 * @param fileName 下载时的文件名
	 * @return
	 * @throws Exception
	 */
	public static boolean download(HttpServletResponse response, File file, String fileName) throws Exception{
		if (response == null || file == null) {
			throw new Exception("response and file can't be null.");
		}
		if (fileName.equals("")) {
			fileName = file.getName();
		}
		BufferedInputStream bis = null;
		BufferedOutputStream bos = null;
		response.setContentType("application/octet-stream");
		response.setHeader("Content-Length", String.valueOf(file.length()));
		try {
			response.setHeader("Content-disposition", String.format("attachment; filename=%s", urlEncoder(fileName, "utf-8")));
			bis = new BufferedInputStream(new FileInputStream(file.getPath()));
			bos = new BufferedOutputStream(response.getOutputStream());
			byte[] buff = new byte[2048];
			int bytesRead;
			while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
				bos.write(buff, 0, bytesRead);
			}
			return true;
		} catch (Exception e) {
			logException(log, e);
			throw e;
		} finally {
			try {
				bis.close();
			} catch (IOException e) {
				logException(log, e);
			}
			try {
				bos.close();
			} catch (IOException e) {
				logException(log, e);
			}
		}
	}
	
	/**
	 * 异常
	 * @author liushaomin
	 * 2016年12月21日
	 * @param log
	 * @param e
	 */
	protected static void logException(Logger log, Exception e) {
		e.printStackTrace();
		StringWriter sw = new StringWriter();
		e.printStackTrace(new PrintWriter(sw));
		log.error(sw.toString());
	}
	
	/**
	 * 获取默认昵称
	 * @author lifuqiang
	 * 2016-12-29
	 * @return
	 */
	public static String getUserNick(){
		return "rbg_"+randomCode();
	}
	
	/**
	 * 接收图片判断是否存在，返回图片文件名
	 * @author lifuqiang
	 * 2017-1-20
	 * @return
	 */
	public static String getThumbName(UploadFile file){
		if(file != null){
			return file.getFileName();
		}else{
			return null;
		}
	}
	
	/**
	 * 获取十位数的时间戳
	 * @author liushaomin
	 * 2017年2月21日
	 * @return
	 */
	public static String currentTimeMillis(){
		return String.valueOf(System.currentTimeMillis()).toString().substring(0,10);
	}
	
	/**
	 * 发送手机验证码
	 * @author liushaomin
	 * 2017年8月15日
	 * @param phone
	 * @param code
	 */
	public static void sendSMS(String phone, String code){
		Map<String, String> Params = new HashMap<String, String>();
		Params.put("command", "MT_REQUEST");
		Params.put("cpid", "wvfzew");
		Params.put("cppwd", "XzVVJ81E");
		Params.put("da", "86" + phone);
		Params.put("dc", "15");
		Params.put("sm", Utils.encodeHexStr("验证码  是" + code + ",请注意查收 。"));//编码后的
		HttpUtils.post("http://api2.santo.cc/submit", Params);
	}
	
	/**
	 * 校验平台验证
	 * @author liushaomin
	 * 2017年8月15日
	 * @param tokenid
	 * @param phone
	 * @param apptoken app经过加密后的token
	 * @return
	 */
	public static boolean validate(String tokenid, String phone, String apptoken){
		PhoneCodeModel phonecode = PhoneCodeModel.dao.findById(tokenid);
		String MD5token = strToMD5(phonecode.getStr("token") + tokenid + "rebogou");
		if(MD5token.equals(apptoken)){
			return true;
		}
		return false;
	}
	
}
